package cn.xopencode.userservice.rpc.user.dto;

import cn.xopencode.common.framework.validator.InEnum;
import cn.xopencode.common.framework.validator.Mobile;
import cn.xopencode.userservice.enums.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;

/**
 * 用户创建 Request DTO
 *
 * @author xiaodawei
 * @since 2021-09-14
 */
@Data
@Accessors(chain = true)
@ApiModel("创建用户")
public class CreateUserDTO implements Serializable {

    /**
     * 用户账号
     */
    @NotBlank(message = "用户账号不能为空")
    @ApiModelProperty(value = "用户账号", required = true)
    private String userName;
    /**
     * 用户昵称
     */
    @NotBlank(message = "用户昵称不能为空")
    @ApiModelProperty(value = "用户昵称", required = true)
    private String nickName;
    /**
     * 员工姓名
     */
    @NotBlank(message = "员工姓名不能为空")
    @ApiModelProperty(value = "员工姓名", required = true)
    private String emplName;
    /**
     * 手机号
     */
    @NotBlank(message = "手机号不能为空")
    @Mobile(message = "手机格式不正确")
    @ApiModelProperty(value = "手机号", required = true)
    private String mobile;
    /**
     * 默认密码为手机号后六位，此处存储加密后的密码
     */
    @ApiModelProperty(value = "默认密码为手机号后六位")
    private String password;
    /**
     * 出生日期
     */
    @NotNull(message = "出生年月不能为空")
    @ApiModelProperty(value = "出生日期")
    private Date birthday;
    /**
     * 民族
     */
    @NotBlank(message = "民族不能为空")
    @ApiModelProperty(value = "民族")
    private String nation;
    /**
     * 用户性别（0、未知;1、男;2、女）
     */
    @InEnum(value = GenderEnum.class, message = "性别必须是 {value}")
    @ApiModelProperty(value = "用户性别（0、未知;1、男;2、女）", required = true)
    private Integer gender;
    /**
     * 政治面貌:0、未知;1、群众;2、党员;3、预备党员;4、团员
     */
    @InEnum(value = PoliticalEnum.class, message = "政治面貌必须是 {value}")
    @ApiModelProperty(value = "政治面貌:0、未知;1、群众;2、党员;3、预备党员;4、团员", required = true)
    private Integer politicalStatus;
    /**
     * 血型:0、未知;1、A;2、B;3、O;4、AB
     */
    @InEnum(value = BloodTypeEnum.class, message = "血型必须是 {value}")
    @ApiModelProperty(value = "血型:0、未知;1、A;2、B;3、O;4、AB", required = true)
    private Integer bloodType;
    /**
     * 婚姻状态:0、未知;1、已婚;2、未婚
     */
    @InEnum(value = MarriageEnum.class, message = "婚姻状态必须是 {value}")
    @ApiModelProperty(value = "婚姻状态:0、未知;1、已婚;2、未婚", required = true)
    private Integer marriageStatus;
    /**
     * 健康状态:0、未知;1、良好;2、疾病
     */
    @InEnum(value = HealthEnum.class, message = "健康状态必须是 {value}")
    @ApiModelProperty(value = "健康状态:0、未知;1、良好;2、疾病", required = true)
    private Integer healthStatus;
    /**
     * 最高学历:0、未知;1、博士;2、硕士;3、本科;4、专科;5、高中;6、初中;7、小学
     */
    @InEnum(value = EducationEnum.class, message = "最高学历必须是 {value}")
    @ApiModelProperty(value = "最高学历:0、未知;1、博士;2、硕士;3、本科;4、专科;5、高中;6、初中;7、小学", required = true)
    private Integer education;
    /**
     * 所学专业：必填
     */
    @NotBlank(message = "所学专业不能为空")
    @ApiModelProperty(value = "所学专业：必填", required = true)
    private String major;
    /**
     * 现任职务：必填
     */
    @NotBlank(message = "当前职务ID不能为空")
    @ApiModelProperty(value = "现任职务：必填", required = true)
    private String positionId;
    /**
     * 工作证号：必填
     */
    @NotBlank(message = "用户账号不能为空")
    @ApiModelProperty(value = "工作证号：必填", required = true)
    private String workNum;
    /**
     * 籍贯：必填
     */
    @NotBlank(message = "籍贯不能为空")
    @ApiModelProperty(value = "籍贯：必填", required = true)
    private String nativePlace;
    /**
     * 入厂时间：必填
     */
    @NotNull(message = "入厂时间不能为空")
    @ApiModelProperty(value = "入厂时间：必填", required = true)
    private Date entryTime;
    /**
     * 微信openId
     */
    @ApiModelProperty(value = "微信openId")
    private String openId;
    /**
     * 所属车间班组：必填
     */
    @NotBlank(message = "所属车间班组不能为空")
    @ApiModelProperty(value = "所属车间班组：必填", required = true)
    private String teamId;
    /**
     * 参加工作时间
     */
    @ApiModelProperty(value = "参加工作时间")
    private Date workingTime;
    /**
     * 毕业院校：必填
     */
    @NotBlank(message = "毕业院校不能为空")
    @ApiModelProperty(value = "毕业院校：必填", required = true)
    private String school;
    /**
     * 家庭联系电话
     */
    @ApiModelProperty(value = "家庭联系电话")
    private String homePhone;
    /**
     * 联系电话：必填
     */
    @NotBlank(message = "手机号不能为空")
    @Mobile(message = "手机格式不正确")
    @ApiModelProperty(value = "联系电话：必填", required = true)
    private String telephone;
    /**
     * 家庭地址：必填
     */
    @NotBlank(message = "家庭地址不能为空")
    @ApiModelProperty(value = "家庭地址：必填", required = true)
    private String homeAddress;
    /**
     * 身份证号：必填
     */
    @NotBlank(message = "身份证号不能为空")
    @ApiModelProperty(value = "身份证号：必填", required = true)
    private String idCard;
    /**
     * 头像地址
     */
    @ApiModelProperty(value = "头像地址")
    private String avatarPath;
    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String remark;
    /**
     * 当前登陆用户的ID
     */
    @ApiModelProperty(value = "当前登陆用户的ID", hidden = true)
    private String userId;
    /**
     * 所属部门
     */
    @ApiModelProperty(value = "所属部门", hidden = true)
    private String deptId;


}
